package com.hacker.highccy.service;

import com.hacker.highccy.dto.Exposer;
import com.hacker.highccy.dto.SeckillExecution;
import com.hacker.highccy.entity.Seckill;
import com.hacker.highccy.exception.RepeatKillException;
import com.hacker.highccy.exception.SeckillCloseException;
import com.hacker.highccy.exception.SeckillException;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 业务接口：站在“使用者”的角度设计接口
 * 三个方面：方法定义粒度、参数、返回类型（return 类型、异常）
 *
 * @Author:这个程序员有纹身
 * @Date: Created in 21:30 2017\12\26 0026
 */
public interface SeckillService {

    /**
     * 查询所有秒杀记录
     * @return
     */
    List<Seckill> getSeckillList();

    /**
     * 查询单个秒杀记录
     * @param seckillId
     * @return
     */
    Seckill getById(long seckillId);

    /**
     * 秒杀开启时：输出秒杀接口的地址, 否则输出系统时间和秒杀时间
     * @param seckillId
     */
    Exposer exportSeckillUrl(long seckillId);

    /**
     * 执行秒杀操作
     * @param seckillId
     * @param userPhone
     * @param md5
     */
    SeckillExecution executeSeckill(long seckillId, long userPhone, String md5)
            throws SeckillException,RepeatKillException,SeckillCloseException;
}
